package com.richpay.basejava.base10;

/**
 目的：相同成员变量值对象的哈希值相同.
 咋办？方法重写

 对于java八大基本数据类型而言，都不是对象，没有提供方法.
 而java是一门面向对象的编程语言，非常希望所有的东西都是对象，
 因此Java对八大基本数据类型都做了封装，即产生了java八大基本数据类型对应的包装类.
 基本数据类型=========》对应的包装类
 byte				    Byte
 short				    Short
 int					Integer
 long				    Long

 float				    Float
 double				    Double

 char				    Character
 boolean				Boolean

 综上所述：Java八大基本数据类型对应的包装类：除了int对应的包装类是Integer,char对应的包装类是Character,其它的
 都是首字母大写.
 */
public class Student {
    private String name;
    private int age;
    private boolean sex;

    public Student(String name,int age,boolean sex){
        this.age=age;
        this.name=name;
        this.sex=sex;
    }

    /**
     *  hashCode()：在Object类中用来返回对象的哈希值，有自己的算法。
     *  这个算法和对象的成员变量值没有关系。
     *
     *  因此无法实现相同成员变量对象的哈希值相同的功能。
     *  如果想实现这个功能，咋办？自己重写，
     *  只要让生成哈希值的函数和对象的成员变量值有关系即可。
     *
     *  业界有个固定的规则:对当前对象的成员变量的哈希值按位异或
     * @return
     */
    @Override
    public int hashCode() {
        return this.name.hashCode()^Integer.valueOf(age).hashCode()^Boolean.valueOf(sex).hashCode();
    }
}
